<?php
/**
 * 
 * GraficosSeguimientoCI ...
 * 
 * @author Algenis Volquez
 *
 */

class GraficosSeguimientoCI extends Controller 
{
	private $_semanaArray;
	private $_usuariosArray;
	private $_semanaActual;
	private $_usuarioActual;
	
	public function __construct() 
	{
		parent::Controller ();
		
		$this->load->library ( array ('chgraficos', 'chcalendario' ) );
		
		$this->load->model ( array ('mcompania', 'mestatus', 'metapas', 'mjurisdiccion', 'mresponsable', 
							'pendienteentrega', 'registroeqsmodel', 'mservicios', 'mprovincia2', 'usuarios', 
							'mprocesos', 'mmodeloservicios', 'mmodeloetapas', 'entrega', 'mdgii', 'CompaniaHistorico',
							 'mscore', 'provincias', 'mtiposeguimientos' ) );
		
		/*$this->_semanaActual = $this->input->post ( 'cantSemana' ) ? $this->input->post ( 'cantSemana' ) : 10;
		$this->_usuarioActual = $this->input->post ( "idUsuario" );
		$this->session->set_userdata ( 'semanaActual', $this->_semanaActual );
		$this->session->set_userdata ( 'usuarioActual', $this->_usuarioActual );*/
		
		/*foreach ( $this->usuarios->LoadUsuarios () as $usuario ) {
			
			if ($usuario->getIdDepartamento () != 1 && $usuario->getIdDepartamento () != 3 && $usuario->getIdDepartamento () != 5 && $usuario->getEstado () != 1) {
				$this->_usuariosArray [] = $usuario;
			}
		}*/
	
	}
	
	public function index() 
	{
		/*$this->load->view ( 'second', array ('content_page' 						=> 'graficosseguimientoci_view', 
											 'menutop' 								=> 0, 
											 'usuarios' 							=> $this->_usuariosArray, 
											 'semanaFiltro' 						=> 10, 
											 'usuarioFiltro' 						=> 0, 
											 'totalSeguimientoCI' 					=> $this->getGraficoTotalSeguimientoCI (), 
											 'totalComposicionSeguimientoCI' 		=> $this->getGraficoTotalComposicionSeguimientoCI (), 
											 'totalComposicionSeguimientoCIGestor' 	=> $this->getGraficoTotalComposicionSeguimientoCIPorGestor (),
											 'totalComposicionRegistrosCIPorGestor' => $this->getGraficoTotalComposicionRegistrosCIPorGestor (), 
											 'totalRegistrosPorEstatusInicial' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 4 ), 
											 'totalRegistrosPorEstatusFirma' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 10 ), 
											 'totalRegistrosPorEstatusDatos' 		=> $this->getGraficoTotalRegistrosPorEstatus ( 11 ), 
											 'promedioSeguimientoCI' 				=> $this->getGraficoPromedioSeguimientoCI (), 
											 'seguimientosCIPorRegistosServicio' 	=> $this->getGraficoSeguimientosCIPorRegistosServicio (), 
											 'promedioSeguimientosPorDia' 			=> $this->getGraficoPromedioSeguimientosPorDia () ) );*/
	
	}
	
	/**
	 * Retorna un grafico tipo barra con el total de Seguimientos de
	 * Control Interno, separados por tipo de seguimiento de Control Interno 
	 */
	public function getGraficoTotalSeguimientoCI() 
	{
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		$aux = 0;
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$aux ++;
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TODAS LLAMADAS
			

			$totalLlamadas = 0;
			$totalLlamadas = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 1, $this->input->post ( "idUsuario" ) );
			
			$registros [$semana] ["totalLlamadas"] = $totalLlamadas;
			
			//TODOS LOS MAIL
			

			$totalMails = 0;
			
			$totalMails = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 2, $this->input->post ( "idUsuario" ) );
			
			$registros [$semana] ["totalMails"] = $totalMails;
			
			//TODOS LOS SMS
			

			$totalSMS = 0;
			
			$totalSMS = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 4, $this->input->post ( "idUsuario" ) );
			
			$registros [$semana] ["totalSMS"] = $totalSMS;
			
			//TODOS LOS MAILS AUTOMATICOS
			

			$totalMailsAuto = 0;
			
			$totalMailsAuto = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, 3, $this->input->post ( "idUsuario" ) );
			
			$registros [$semana] ["totalMailsAuto"] = $totalMailsAuto;
			
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strLlamadas = "<dataset seriesName='Llamadas'>";
		$strMails = "<dataset seriesName='Mail'>";
		$strSMS = "<dataset seriesName='SMS'>";
		$strMailAuto = "<dataset seriesName='Mail Automatico'>";
		
		foreach ( $registros as $semana ) {
			$strLlamadas .= "<set value='" . $semana ["totalLlamadas"] . "' />";
			$strMails .= "<set value='" . $semana ["totalMails"] . "' />";
			$strSMS .= "<set value='" . $semana ["totalSMS"] . "' />";
			$strMailAuto .= "<set value='" . $semana ["totalMailsAuto"] . "'/>";
		}
		
		$strLlamadas .= "</dataset>";
		$strMails .= "</dataset>";
		$strSMS .= "</dataset>";
		$strMailAuto .= "</dataset>";
		
		$strCat .= $strLlamadas;
		$strCat .= $strMails;
		$strCat .= $strSMS;
		$strCat .= $strMailAuto;
		
		$strXML = "<chart caption='Total Seguimientos de Control Interno' xAxisName='Semanas' showValues='0' plotFillAlpha='95' formatNumberScale='0'>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/StackedColumn3D.swf", "ChartId1", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	
	/**
	 * Retorna un grafico tipo pastel con la composicion de los tipos de seguimiento,
	 * Ejemplo: Mail, Llamada, SMS, Mail Automatico
	 * 
	 */
	public function getGraficoTotalComposicionSeguimientoCI() 
	{
		
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Composicion Tipo Seguimiento de Control Interno' baseFontSize='11' showValues='1'>";
		$tiposSeguimiento = $this->mtiposeguimientos->loadTipoSeguimientos ();
		
		foreach ( $tiposSeguimiento as $tipoSeguimiento ) {
			
			$registros = $this->mprocesos->loadProcesosPorSemana ( $filtroSemana, $tipoSeguimiento->getMIdTipoSeguimiento (), $this->input->post ( "idUsuario" ) );
			
			$strXML .= "<set label = '" . $tipoSeguimiento->getMTipoSeguimiento () . "' value ='" . $registros . "'/>";
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "", $strXML, "ChartId2", 375, 250, false );
	}
	/**
	 * Retorna un grafico tipo pastel con la composicion de los tipos de seguimiento,
	 * de control interno por Gestor
	 * 
	 */
	public function getGraficoTotalComposicionSeguimientoCIPorGestor() 
	{
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Seguimientos de CI, por Gestor' baseFontSize='11' showValues='1' xAxisName=''>";
		
		foreach ( $this->_usuariosArray as $gestor ) {
			
			$registros = $this->mprocesos->loadProcesosPorGestor ( $filtroSemana, $gestor->getIdUsuario () );
			
			$strXML .= "<set label = '" . $gestor->getNombreUsuario () . "' value ='" . $registros . "'/>";
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId3", $strXML, "Pizza", 375, 250, false );
	}
	
	/**
	 * Retorna un grafico tipo pastel con la composicion de los registros,
	 * de CI, por Gestor Ojo (Inicial Datos y Firma).
	 * 
	 */
	
	public function getGraficoTotalComposicionRegistrosCIPorGestor() 
	{
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$filtroSemana = array ();
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Registros de CI, por Gestor (Inicial Datos y Firma).' baseFontSize='11' showValues='1' xAxisName=''>";
		
		foreach ( $this->_usuariosArray as $gestor ) {
			
			$registros = $this->mprocesos->loadProcesosPorGestorYEtapa ( $filtroSemana, $gestor->getIdUsuario () );
			
			$strXML .= "<set label = '" . $gestor->getNombreUsuario () . "' value ='" . $registros . "'/>";
		}
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId4", $strXML, "Pizza", 375, 250, false );
	}
	
	/**
	 * Retorna un grafico tipo pastel con el Total de Registros 
	 * por Estatus (Rojo, Amarilla, Verde) de una etapa en 
	 * especifico
	 * 
	 * @param int idEtapa 
	 * @return
	 */
	
	public function getGraficoTotalRegistrosPorEstatus($idEtapa) 
	{
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$etapa = $this->metapas->LoadEtapaById ( $idEtapa );
		
		$filtroSemana = array ();
		
		$totalRojos = 0;
		$totalAmarillos = 0;
		$totalVerdes = 0;
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			$filtroSemana ['inicial'] = $fecha [0];
			$semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
			$filtroSemana ['final'] = $this->_semanaArray [$semanaFinal] [1];
			break;
		}
		
		$strXML = "<chart caption = 'Total de Registros por Estatus (Etapa {$etapa->GetNombre()})' baseFontSize='11' showValues='1' xAxisName=''>";
		
		$registros = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, $idEtapa, $this->input->post ( "idUsuario" ), false, false );
		
		$colores_array_etapa = $this->mmodeloetapas->loadModeloEtapas ();
		$colores_etapa = $colores_array_etapa [0];
		
		if (is_array ( $registros )) {
			foreach ( $registros as $registro ) {
				
				$dias = $this->chcalendario->calcularDias ( $registro->getFechaSys (), $registro->getFechaS () );
				
				$bruto_etapa = ($dias / $etapa->GetTiempoEstimado ()) * 100;
				
				if ($bruto_etapa >= $colores_etapa->getVerdeModelo () and $bruto_etapa < $colores_etapa->getAmarilloModelo () or $bruto_etapa == 0 or $bruto_etapa < 0) {
					if ($registro->getFechaS () >= $filtroSemana ['inicial']) {
						$totalVerdes ++;
					}
				
				} elseif ($bruto_etapa >= $colores_etapa->getAmarilloModelo () and $bruto_etapa < $colores_etapa->getRojoModelo ()) {
					if ($registro->getFechaS () >= $filtroSemana ['inicial']) {
						$totalAmarillos ++;
					}
				} else {
					if ($registro->getFechaS () >= $filtroSemana ['inicial']) {
						$totalRojos ++;
					}
				}
			}
		}
		
		$strXML .= "<set label = 'Verdes' value ='" . $totalVerdes . "' color='#89942c'/>";
		$strXML .= "<set label = 'Amarillos' value ='" . $totalAmarillos . "' color='#FAE421'/>";
		$strXML .= "<set label = 'Rojos' value ='" . $totalRojos . "' color='#FF5252'/>";
		
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId5", $strXML, "Pizza", 375, 250, false );
	}
	
	/**
	 * Retorna un grafico tipo lineal con el promedio de dias
	 * por inicial, firma y datos 
	 */
	public function getGraficoPromedioSeguimientoCI() 
	{
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TOTAL DE DIAS : INICIAL 
			

			$cantidadDiasInicial = 0;
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 4, $this->input->post ( "idUsuario" ), false, false );
			
			if (is_array ( $procesos )) {
				foreach ( $procesos as $proceso ) {
					
					$dias = $this->chcalendario->calcularDias ( $proceso->getFechaSys (), $proceso->getFechaS () );
					$cantidadDiasInicial += $dias;
				}
			} else {
				$cantidadDiasInicial = 0;
			}
			//TOTAL DE DIAS : FIRMA 
			

			$cantidadDiasFirma = 0;
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 10, $this->input->post ( "idUsuario" ), false, false );
			
			if (is_array ( $procesos )) {
				foreach ( $procesos as $proceso ) {
					
					$dias = $this->chcalendario->calcularDias ( $proceso->getFechaSys (), $proceso->getFechaS () );
					$cantidadDiasFirma += $dias;
				}
			} else {
				$cantidadDiasFirma = 0;
			}
			
			//TOTAL DE DIAS : DATOS 
			

			$cantidadDiasDatos = 0;
			$procesos = $this->mprocesos->loadProcesosPorIdEtapa ( $filtroSemana, 11, $this->input->post ( "idUsuario" ), false, false );
			
			if (is_array ( $procesos )) {
				foreach ( $procesos as $proceso ) {
					
					$dias = $this->chcalendario->calcularDias ( $proceso->getFechaSys (), $proceso->getFechaS () );
					$cantidadDiasDatos += $dias;
				}
			} else {
				$cantidadDiasDatos = 0;
			}
			
			//TOTAL DIAS TODOS LOS SEGUIMIENTO
			

			$totalDiasSeguimientos = 0;
			$procesos = $this->mprocesos->loadProcesosPorEtapas ( $filtroSemana, $this->input->post ( "idUsuario" ) );
			
			if (is_array ( $procesos )) {
				foreach ( $procesos as $proceso ) {
					$dias = $this->chcalendario->calcularDias ( $proceso->getFechaSys (), $proceso->getFechaS () );
					$totalDiasSeguimientos += $dias;
				}
			} else {
				$totalDiasSeguimientos = 0;
			}
			
			if ($totalDiasSeguimientos == 0) {
				$promedioEtapaInicial = 0;
				$promedioEtapaFirma = 0;
				$promedioEtapaDatos = 0;
			} else {
				$promedioEtapaInicial = ($cantidadDiasInicial / $totalDiasSeguimientos) * 100;
				$promedioEtapaFirma = ($cantidadDiasFirma / $totalDiasSeguimientos) * 100;
				$promedioEtapaDatos = ($cantidadDiasDatos / $totalDiasSeguimientos) * 100;
				
				if ($promedioEtapaInicial < 0) {
					$promedioEtapaInicial *= (- 1);
				}
				if ($promedioEtapaFirma < 0) {
					$promedioEtapaFirma *= (- 1);
				}
				if ($promedioEtapaDatos < 0) {
					$promedioEtapaDatos *= (- 1);
				}
			}
			$registros [$semana] ["promedioEtapaInicial"] = $promedioEtapaInicial;
			$registros [$semana] ["promedioEtapaFirma"] = $promedioEtapaFirma;
			$registros [$semana] ["promedioEtapaDatos"] = $promedioEtapaDatos;
			
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strPromedioInicial = "<dataset seriesName='Inicial'>";
		$strPromedioFirma = "<dataset seriesName='Firma'>";
		$strPromedioDatos = "<dataset seriesName='Datos'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioInicial .= "<set value='" . $semana ["promedioEtapaInicial"] . "' />";
			$strPromedioFirma .= "<set value='" . $semana ["promedioEtapaFirma"] . "' />";
			$strPromedioDatos .= "<set value='" . $semana ["promedioEtapaDatos"] . "' />";
		}
		
		$strPromedioInicial .= "</dataset>";
		$strPromedioFirma .= "</dataset>";
		$strPromedioDatos .= "</dataset>";
		
		$strCat .= $strPromedioInicial;
		$strCat .= $strPromedioFirma;
		$strCat .= $strPromedioDatos;
		
		$strXML = "<chart caption='Promedio Seguimientos de CI por Etapas(Inicial, Firma y Datos)' xAxisName='Semanas' showValues='0' numberPrefix=''>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSLine.swf", "ChartId6", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	
	/**
	 * GRAFICO NO.3
	 * Retorna un grafico tipo lineal con el promedio de los
	 * tipo de seguimiento de control interno
	 */
	
	public function getGraficoSeguimientosCIPorRegistosServicio() 
	{
		$registros = array ();
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TOTAL SEGUIMIENTOS CONTROL INTERNO
			

			$totalSeguimientosCI = $this->mprocesos->loadProcesosPorGestor ( $filtroSemana, $this->input->post ( "idUsuario" ) );
			
			//TOTAL DIAS TODOS LOS SEGUIMIENTO
			

			$totalRegistrosServicios = $this->mcompania->loadCountCompaniasByStage ( $filtroSemana, array (4, 10, 11 ), $this->input->post ( "idUsuario" ) );
			
			$promedio = ($totalRegistrosServicios == 0) ? 0 : ($totalSeguimientosCI / $totalRegistrosServicios);
			
			$registros [$semana] ["promedio"] = $promedio;
			continue;
		}
		
		$strCat .= "</categories>";
		
		$strPromedioTotalSeguimiento = "<dataset seriesName='Seguimientos de CI por Registos Servicio'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioTotalSeguimiento .= "<set value='" . $semana ["promedio"] . "' />";
		
		}
		
		$strPromedioTotalSeguimiento .= "</dataset>";
		
		$strCat .= $strPromedioTotalSeguimiento;
		
		$strXML = "<chart caption='Total de Seguimientos de CI / Total Registros de Servicio' xAxisName='Semanas' showValues='0' numberPrefix=''>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSLine.swf", "ChartId7", $strXML, "sACsa", 595, 250, 0, 0 );
	}
	
	/**
	 * Retorna un grafico tipo barra 
	 */
	
	public function getGraficoPromedioSeguimientosPorDia() 
	{
		$registros = array ();
		
		$this->_semanaArray = $this->chcalendario->semana ( $this->_semanaActual );
		
		$strCat = "<categories>";
		
		foreach ( $this->_semanaArray as $semana => $fecha ) {
			
			$filtroSemana ['inicial'] = $fecha [0];
			$filtroSemana ['final'] = $fecha [1];
			
			$semanaDetalle = explode ( "-", $semana );
			
			$strCat .= "<category label='" . $semanaDetalle [0] . "'/>";
			
			//TOTAL DIAS TODOS LOS SEGUIMIENTO
			

			$totalDias = 0;
			$procesos = $this->mprocesos->loadProcesosPorGestorYFecha ( $filtroSemana, $this->input->post ( "idUsuario" ) );
			
			if (is_array ( $procesos )) {
				$semanaFinal = $semanaFinal = date ( 'W' ) . '-' . date ( 'Y' );
				$semanaFinal = $this->_semanaArray [$semanaFinal] [1];
				foreach ( $procesos as $proceso ) {
					$dias = $this->chcalendario->calcularDias ( $proceso->getFechaSys (), $semanaFinal );
					$totalDias += $dias;
				}
			} else {
				$totalDias = 0;
			}
			
			$registros [$semana] ["promedioDias"] = $totalDias;
			
			continue;
		
		}
		$strCat .= "</categories>";
		
		$strPromedioDias = "<dataset seriesName='Promedio dias por semana'>";
		
		foreach ( $registros as $semana ) {
			$strPromedioDias .= "<set value='" . $semana ["promedioDias"] . "'/>";
		
		}
		
		$strPromedioDias .= "</dataset>";
		
		$strCat .= $strPromedioDias;
		
		$strXML = "<chart palette='1' caption='Total promedio Seguimientos por dias' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName=''  numDivLines='4' formatNumberScale='0'>";
		$strXML .= $strCat;
		$strXML .= "</chart>";
		return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/MSColumn3DLineDY.swf", "ChartId9", $strXML, "sACsa", 595,250, 0, 0);
	
     	}
	}